package com.qf.test;

import com.qf.interfaces.FangDongInterface;
import com.qf.staticProxy.FangDongImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @ClassName testJDK
 * @Author xiao宋
 * @Date 20:18  2022/9/27
 * @Version 1.0
 * @Description TODO
 */
public class testJDK {

    public static void main(String[] args) {
         final FangDongInterface fd = new FangDongImpl();
        /**
         * Proxy.newProxyInstance() 创建代理对象用的
         * 三个参数分别是
         * 当前类的class.getClassLoader（反射的知识）
         * 你需要调用的接口
         * 要调用的方法参数列表
         */
        FangDongInterface fangDongObject = (FangDongInterface) Proxy.newProxyInstance(testJDK.class.getClassLoader(), fd.getClass().getInterfaces(), new InvocationHandler() {
            /**
             * @param proxy 要调用的代理实例
             * @param method 实例上要调用的接口方法
             * @param args 老规矩。参数列表
             * @return
             */
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("中介：打扫卫生？ 不可能的。");
                System.out.println("中介：我只会坑钱");
                System.out.println("     1      "+fd.getClass());
                System.out.println("     2      "+FangDongInterface.class);
                Object invoke = method.invoke(fd, args);

                return invoke;
            }
        });
        fangDongObject.zuFang();
    }

}
